engineering consultant firmware programming firmware specification hardware pcb computer tools software design